Drag and Drop (DND) ফিচার ব্যবহার করে ফাইল আপলোড একটি শক্তিশালী এবং ইন্টারঅ্যাকটিভ পদ্ধতি, যা ব্যবহারকারীদের সহজে ফাইলগুলি ওয়েব অ্যাপ্লিকেশন বা সাইটে আপলোড করতে সহায়তা করে। ExtJS এর Drag and Drop সমর্থন এবং File Upload ফিচার ব্যবহারের মাধ্যমে আপনি একটি কাস্টম ড্র্যাগ এবং ড্রপ ফাইল আপলোড সিস্টেম তৈরি করতে পারবেন।
এখানে, আমরা ExtJS এর মাধ্যমে কাস্টম ড্র্যাগ এবং ড্রপ ফিচার ব্যবহার করে ফাইল আপলোড করার জন্য একটি উদাহরণ দেখবো।
এটি করার জন্য আমরা কয়েকটি কাস্টম ফিচার এবং FileReader API ব্যবহার করব। প্রথমে, drag and drop সাপোর্ট এবং তারপর upload ফাংশনালিটি তৈরি করব।
Ext.create('Ext.panel.Panel', {
title: 'Drag and Drop File Upload',
width: 500,
height: 200,
renderTo: Ext.getBody(),
layout: 'fit',
// Drag and drop configuration
listeners: {
render: function(panel) {
panel.getEl().on('dragover', function(e) {
e.stopEvent();
panel.body.setStyle('background-color', '#f0f0f0'); // Hover effect
});
panel.getEl().on('dragleave', function(e) {
e.stopEvent();
panel.body.setStyle('background-color', ''); // Remove hover effect
});
panel.getEl().on('drop', function(e) {
e.stopEvent();
panel.body.setStyle('background-color', ''); // Remove hover effect
var files = e.browserEvent.dataTransfer.files;
if (files.length > 0) {
var file = files[0];
// Call function to upload file
uploadFile(file);
}
});
}
},
html: '<div style="height: 100%; display: flex; justify-content: center; align-items: center;">' +
'<p>Drag and drop a file here to upload.</p></div>'
});
// Function to upload the file
function uploadFile(file) {
var formData = new FormData();
formData.append('file', file);
// Create an AJAX request to upload the file
Ext.Ajax.request({
url: 'your-upload-endpoint.php', // Server-side script to handle file upload
method: 'POST',
rawData: formData,
headers: {
'Content-Type': null // Let the browser set the correct content-type for FormData
},
success: function(response) {
Ext.Msg.alert('Success', 'File uploaded successfully!');
},
failure: function(response) {
Ext.Msg.alert('Error', 'File upload failed.');
}
});
}
render
লিসেনার:render
ইভেন্টে আমরা ড্র্যাগ এবং ড্রপ ইভেন্ট হ্যান্ডলিং সেট করছি।dragover
: ব্যবহারকারী যখন ফাইলটি প্যানেলের উপর ড্র্যাগ করবে তখন এটি ট্রিগার হবে। আমরা ব্যাকগ্রাউন্ড রং পরিবর্তন করছি যাতে ফাইল ড্রপ হওয়ার জন্য প্রস্তুত দেখায়।dragleave
: ফাইলটি প্যানেলের বাইরে চলে গেলে এটি ট্রিগার হয় এবং ব্যাকগ্রাউন্ড রং পূর্বাবস্থায় ফিরে যায়।drop
: ব্যবহারকারী যখন ফাইলটি প্যানেলের মধ্যে ছেড়ে দিবে, তখন এটি ট্রিগার হবে এবং uploadFile()
ফাংশন কল হবে, যা ফাইলটি আপলোড করতে ব্যবহৃত হবে।uploadFile()
ফাংশন:FormData
ব্যবহার করে ফাইলটি সার্ভারে পাঠানো হয়।Ext.Ajax.request()
ব্যবহার করে AJAX রিকুয়েস্ট পাঠানো হয়। এখানে, ফাইলটি POST মেথড দিয়ে সার্ভারে পাঠানো হয়।your-upload-endpoint.php
হল সেই URL যেখানে ফাইলটি আপলোড করা হবে। সার্ভার সাইডে ফাইল রিসিভ এবং প্রক্রিয়া করার জন্য সঠিক স্ক্রিপ্ট তৈরি করতে হবে।এছাড়া, আপনি যদি ফাইলের প্রিভিউ দেখতে চান, যেমন ইমেজ বা পিডিএফ ফাইল, তবে FileReader API ব্যবহার করে ফাইলের প্রিভিউ প্রদর্শন করতে পারেন।
function uploadFile(file) {
// FileReader API to preview image
var reader = new FileReader();
reader.onload = function(e) {
var img = new Image();
img.src = e.target.result;
var previewContainer = Ext.create('Ext.container.Container', {
renderTo: Ext.getBody(),
items: [{
xtype: 'image',
src: e.target.result,
height: 150
}]
});
};
reader.readAsDataURL(file); // Read the file as Data URL
// Now upload the file to the server
var formData = new FormData();
formData.append('file', file);
Ext.Ajax.request({
url: 'your-upload-endpoint.php',
method: 'POST',
rawData: formData,
headers: {
'Content-Type': null
},
success: function(response) {
Ext.Msg.alert('Success', 'File uploaded successfully!');
},
failure: function(response) {
Ext.Msg.alert('Error', 'File upload failed.');
}
});
}
এখানে, FileReader ব্যবহার করে আমরা ফাইলটি Data URL হিসেবে রিড করছি এবং তারপর একটি ইমেজ হিসেবে প্রদর্শন করছি। এটি ইমেজ ফাইলগুলির জন্য প্রিভিউ দেখাতে সাহায্য করবে।
ফাইলের টাইপ চেক করতে পারেন যাতে শুধুমাত্র নির্দিষ্ট ধরনের ফাইল আপলোড করা যায়।
function uploadFile(file) {
var validFileTypes = ['image/jpeg', 'image/png', 'application/pdf']; // Example valid file types
if (validFileTypes.indexOf(file.type) === -1) {
Ext.Msg.alert('Invalid File', 'Only JPG, PNG, and PDF files are allowed!');
return;
}
var formData = new FormData();
formData.append('file', file);
Ext.Ajax.request({
url: 'your-upload-endpoint.php',
method: 'POST',
rawData: formData,
headers: {
'Content-Type': null
},
success: function(response) {
Ext.Msg.alert('Success', 'File uploaded successfully!');
},
failure: function(response) {
Ext.Msg.alert('Error', 'File upload failed.');
}
});
}
এখানে, আমরা file.type এর মাধ্যমে ফাইলের MIME টাইপ যাচাই করছি এবং কেবলমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন, JPG, PNG, PDF) অনুমোদন করছি।
এটি একটি কাস্টম ড্র্যাগ এবং ড্রপ ফাইল আপলোড সিস্টেম তৈরি করার মৌলিক পদ্ধতি, যা ExtJS ফ্রেমওয়ার্কে কার্যকরভাবে কাজ করবে।